﻿
/// <summary>
/// 网格组件中单个格子的数据处理类接口, 无泛型
/// </summary>
public interface IUiCell : IDestroy
{
    /// <summary>
    /// 是否启用了当前 Cell
    /// </summary>
    bool Enable { get; }

    /// <summary>
    /// 当前 Cell 在 UiGrid 组件中的索引位置
    /// </summary>
    int Index { get; }

    /// <summary>
    /// 获取所在网格组件
    /// </summary>
    IUiGrid GetGrid();

    /// <summary>
    /// 当前 Cell 初始化时调用
    /// </summary>
    void OnInit();

    /// <summary>
    /// 如果启用了当前 Cell, 则每帧调用
    /// </summary>
    void Process(float delta);
    
    /// <summary>
    /// 触发当前 Cell 的点击
    /// </summary>
    void Click();
    
    /// <summary>
    /// 当前Ui被点击时调用<br/>
    /// 如果 Cell 的模板为 BaseButton 类型, 则 UiCell 会自动绑定点击事件<br/>
    /// 如果需要自己绑定点击事件, 请绑定 UiCell.Click() 函数<br/>
    /// 如果当前 Cell 未被选中, 则 OnSelect() 会比 OnClick() 先调用
    /// </summary>
    void OnClick();

    /// <summary>
    /// 双击当前 Cell 调用
    /// </summary>
    void OnDoubleClick();

    /// <summary>
    /// 当启用当前 Cell 时调用
    /// </summary>
    void OnEnable();

    /// <summary>
    /// 当禁用当前 Cell 时调用, 也就是被回收时调用
    /// </summary>
    void OnDisable();
    
    /// <summary>
    /// 当检测当前 Cell 是否可以被选中时调用
    /// </summary>
    bool CanSelect();
    
    /// <summary>
    /// 当前 Cell 选中时调用, 设置 UiGrid.SelectIndex 时触发
    /// </summary>
    void OnSelect();

    /// <summary>
    /// 当前 Cell 取消选中时调用, 设置 UiGrid.SelectIndex 时触发
    /// </summary>
    void OnUnSelect();

    /// <summary>
    /// 当 Cell 索引发生改变时调用, 在 UiGrid 中调用 Insert(), Remove() 等函数时被动触发当前 Cell 索引值改变, Cell 业务逻辑需要用到索引值时, 那么就可以重写该函数<br/>
    /// 注意: 该函数第一次调用会在 OnSetData() 之前调用
    /// </summary>
    void OnRefreshIndex();

    /// <summary>
    /// 销毁当前cell时调用
    /// </summary>
    void OnDestroy();
}